package com.cskaoyan.javase.file._3api;

/**
 * @description: 自定义获取功能
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import java.io.File;
import java.io.FileFilter;

/**
 * 自定义的File文件获取功能是在listFiles()无参方法的基础上,相当于对目录下的文件做了一次筛选工作,它使用的是listFiles(FileFilter o)
 * FileFilter接口是一个功能接口,它表示文件过滤的规则,其中的accept表示文件过滤的规则
 *
 *
 *
 */
public class Demo3 {
    public static void main(String[] args) {
        File f = new File("e:\\2");
        /*
        //传入实现类对象的方法
        File[] files = f.listFiles(new MyFilter());
        for (File file : files) {
            System.out.println(file.getName());
        }*/

        //匿名内部类
        /*File[] files = f.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                //过滤的规则: 我想看学习资料相关的视频
                return pathname.isFile() && pathname.getName().endsWith(".mp4") && pathname.getName().contains("学习资料");
            }
        });
        for (File file : files) {
            System.out.println(file.getName());
        }*/

        //lambda表达式
        //过滤的规则: 看一下跟"奥特曼"相关的
        File[] files = f.listFiles(file -> file.getName().contains("奥特曼"));
        for (File file : files) {
            System.out.println(file.getName());
        }

        //过滤的规则: 我希望能够看到所有的文本文件
        File[] files1 = f.listFiles(file -> file.isFile() && file.getName().endsWith(".txt"));
        for (File file : files1) {
            System.out.println(file.getName());
        }
    }
}

class MyFilter implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        //过滤的规则:我只想听歌
        //对传入的file对象做判断,该方法返回true的留在,返回false的就被过滤掉了
        return pathname.isFile() && pathname.getName().endsWith(".mp3");
    }
}